<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    // 一、创建一个数组
    console.log('----------一、创建一个数组--------------')
    console.log(new Array(6))     //    [ <6 empty slots> ]
    console.log(new Array(6,6))   //    [ 6, 6 ]
    console.log(Array.of(6))      //    [ 6 ]
    
    // 二、数组元素操作
    console.log('----------二、数组元素操作------------')
    var arr=[3,4]
    console.log(arr.push(1,2),arr)             // 4   [ 3, 4, 1, 2 ]          返回插入后数组的长度
    console.log(arr.unshift(1,2),arr)          // 6   [ 1, 2, 3, 4, 1, 2 ]    返回插入后数组的长度
    console.log(arr.pop(),arr)                 // 2   [ 1, 2, 3, 4, 1 ]       返回删除的数组元素
    console.log(arr.shift(1,2),arr)            // 1   [ 2, 3, 4, 1 ]          返回删除的数组元素
    console.log(arr.length,arr)                // 4   [ 2, 3, 4, 1 ]          取得数组的长度

    // 三、数组方法
    console.log('----------三、数组方法------------')
    // 数组的合并 concat
    console.log('----------数组的合并 concat------------')
    arr = [1,2]
    var arr2 = [3,4]
    var arr3 = [5,6]
    console.log(arr.concat(arr2,arr3))      //  结果：[1, 2, 3, 4, 5, 6]
    console.log([...arr2,...arr3])          //  结果：[3, 4, 5, 6]
    // 数组与字符串的转换 join、split
    console.log('----------数组与字符串的转换 join、split------------')
    arr = [1,3,9];
    console.log(arr.join())             //  结果：1,3,9
    console.log(arr.join("-"))          //  结果：1-3-9
    console.log(arr.toString())         //  结果：1,3,9
    console.log([..."hello"])           //  结果：["h", "e", "l", "l", "o"]
    console.log("1,3,9".split(","))     //  结果：["1", "3", "9"]
    console.log("139".split(""))        //  结果：["1", "3", "9"]
    console.log(Array.from("139"))      //  结果：["1", "3", "9"]
    // 数组的截取 slice
    console.log('----------数组的截取 slice------------')
    arr = [2,4,1,9,3]
    // 原数组不影响
    console.log(arr.slice())         //  结果：[2,4,1,9,3]
    console.log(arr.slice(1))        //  结果：[4,1,9,3]
    console.log(arr.slice(1,3))      //  结果： [4, 1]
    console.log(arr.slice(-1)[0])    //  结果: 3,等价于arr[arr.length-1]
    //  当需要头尾参数时一般都是含头不含尾，并且头是从0开始计算
    // 数组的增删改 splice
    console.log('----------数组的增删改 splice------------')
    arr = [2,4,1,9,3] 
    console.log(arr.splice(1))        //  结果：[4, 1, 9, 3] ，原数组[2] 
    arr = [2,4,1,9,3]
    console.log(arr.splice(1,1));     //  结果：[4]，原数组[2, 1, 9, 3] （删除单个元素）
    arr = [2,4,1,9,3]
    console.log(arr.splice(1,0,5))    //  结果：[]，原数组[2, 5, 1, 9, 3] （新增单个元素）
    console.log(arr.splice(1,1,7))    //  结果：[5]，原数组[2, 7, 1, 9, 3] （替换单个元素）
    // 数组的排序 sort  默认升序 返回结果的同时会更改原数组 sort的数字默认比较会按照字符串比较
    console.log('----------数组的排序 sort------------')
    arr = [2,4,11,9,3]
    console.log(arr.sort())             //  结果：  [11, 2, 3, 4, 9]
    console.log(arr.sort((a,b)=> a-b))   //  结果：  [2,3,4,9,11]
    arr= [2,4,1];
    // arr.reduce((prev, curr) => prev+curr,0)
    let result = arr.reduce((prev,curr,index) => {
      console.log(prev)   //结果：0、2、6
      return prev+=curr;
    },0)
    console.log(result)  //结果：7
  </script>
</body>
</html>